当前位置:  开发笔记 > 编程语言 > 正文

排序| uniq | xargs grep ...行包含空格

如何解决《排序|uniq|xargsgrep行包含空格》经验,为你挑选了1个好方法。

我有一个逗号分隔文件"myfile.csv",其中第5列是日期/时间戳.(mm/dd/yyyy hh:mm).我需要列出包含重复日期的所有行(有很多)

我正在通过cygwin为WinXP使用bash shell

$ cut -d, -f 5 myfile.csv | sort | uniq -d 

正确返回重复日期的列表

01/01/2005 00:22
01/01/2005 00:37
[snip]    
02/29/2009 23:54

但我无法弄清楚如何将这个提供给grep给我所有的行.显然,我不能xargs直接使用,因为输出包含空格.我认为我可以这样做,uniq -z -d但由于某种原因,组合这些标志会导致uniq(显然)没有返回任何内容.

所以,鉴于此

 $ cut -d, -f 5 myfile.csv | sort | uniq -d -z | xargs -0 -I {} grep '{}' myfile.csv

不起作用......我该怎么办?

我知道我可以做到这一点perl或其他脚本语言......但我生性倔强坚持认为我应该能够做到这一点在bash使用标准的命令行工具,如sort,uniq,find,grep,cut,等.

教我,哦,打击大师.如何使用典型的cli工具获取所需的行列表?



1> Andrew Barne..:

    sort -k5,5将对字段进行排序并避免剪切;

    uniq -f 4将忽略uniq的前4个字段;

    再加上uniq上的-D将获得所有重复的行(vs -d,它只能获得一个);

    但uniq会期望使用制表符分隔而不是csv,所以tr'\ t'','来修复它.

问题是如果#5之后的字段不同.你的约会时间长度是一样的吗?您可以将-w 16(包含时间)或-w 10(仅适用于日期)添加到uniq.

所以:

tr '\t' ',' < myfile.csv | sort -k5,5 | uniq -f 4 -D -w 16

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有